# 对应CSDN python系列专栏博客
# 对应2024/04/08 的python博客
# 主题：数学函数和特殊内置函数大揭秘：Python中隐藏的秘密武器
# 2024/04/12 发布

# 一、复数，分数和高精度实数
# 1.1 复数
z1 = 3 + 9j
z2 = 5 + 7J

print(f"z1的实部{z1.real},z2的实部{z2.real},实部和{z1.real + z2.real}")
print(f"z1的虚部{z1.imag},z2的虚部{z2.imag}")

# 复数求模，用数学函数abs求解
print(f"z1的模长:{abs(z1)},z2的模长:{abs(z2)}")
# 复数求共轭，conjugate()方法
print(f"z1的共轭复数:{z1.conjugate()}")

# 1.2 分数和高精度实数
from fractions import Fraction

frac = Fraction(3, 4)  # 表示 3/4
print(frac)

result = frac + Fraction(1, 2)  # 分数运算
print(result)

print(f"{frac.denominator}")  # 打印分母
print(f"{frac.numerator}")  # 打印分子

from decimal import Decimal

x = Decimal(6 / 99)
y = Decimal(1 / 3)
result = x + y
print(result)

# 常用的数学函数

import math

print(math.exp(2))
print(math.fabs(-8.0))
print(math.modf(3.6))
print(math.sin(3))
print(math.cos(3))
print(math.tan(0.785))
E = math.e
pi = math.pi

# 内置函数
# 3.1 使用help
help(sum)
# 3.2.1 range()

# 生成从0到4的一系列数字
for i in range(5):
    print(i, end=" ")

# 生成从2到6的一系列数字
for i in range(2, 7):
    print(i)

# 生成从1到10的奇数
for i in range(1, 11, 2):
    print(i, end=" ")

# 3.2.2 type 和 isinstance
x = 5
print(type(x))

x = 5
print(isinstance(x, int))

y = 'Hello'
print(isinstance(y, str))

z = [1, 2, 3]
print(isinstance(z, (list, tuple)))

# 3.2.3 eval

# 计算简单的数学表达式
result = eval("2 + 3 * 4")
print(result)  # 输出：14，因为 3 * 4 = 12，然后再加上 2

# 使用局部变量执行表达式
x = 10
result = eval("x + 5")
print(result)  # 输出：15


# 3.2.4 map

# 定义一个函数，用于对每个元素加1
def add_one(x):
    return x + 1

my_list = [1, 2, 3, 4, 5]


result = map(add_one, my_list)

# 将结果转换为列表并输出
print(list(result))

# 3.2.5 filter

# 定义一个函数，用于判断是否为偶数
def is_even(x):
    return x % 2 == 0

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


result = filter(is_even, my_list)

print(list(result))

# 3.2.6 zip

list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]

# 使用 zip() 将两个列表中的元素组合成元组
result = zip(list1, list2)

# 将结果转换为列表并输出
print(list(result))  # 输出：[('a', 1), ('b', 2), ('c', 3)]

# 3.2.7 enumerate

my_list = ['a', 'b', 'c', 'd', 'e']

# 使用 enumerate() 获取索引和对应的值
for index, value in enumerate(my_list):
    print(index, value)


